#include <QApplication>
#include <QLibraryInfo>
#include <QTranslator>
#include <QMessageBox>
#include <QScreen>
#include <QDebug>
#include <singleapplication.h>
#include "log.hpp"
#include "windowmanage.hpp"

#include <ui/mainwindow.h>
#include "dbus/dbusvfsinterface.h"
#include "log.hpp"
#include "windowmanage.hpp"

const QString VERSION = "1.0.0";

bool initVLC()
{
    QFileInfo file("/bin/vlc");
    return file.isExecutable();
}

int main(int argc, char *argv[])
{
    qInstallMessageHandler(kabase::Log::logOutput);
    setbuf(stdout, NULL);
    // set env
#ifdef Q_OS_LINUX
    qputenv("ADB_PATH", "/usr/lib/android-sdk/platform-tools/adb");
    qputenv("SERVER_PATH", "/usr/share/kylin-connectivity/scrcpy-server.jar");
    qputenv("CONFIG_PATH", "/usr/share/kylin-connectivity/config");
    qputenv("KEYMAP_PATH", "/usr/share/kylin-connectivity/keymap");
#endif

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    kabase::WindowManage::setScalingProperties();
    kdk::QtSingleApplication app(argc, argv);

    // update version
    app.setApplicationVersion(VERSION);

    if (app.isRunning()) {
        qDebug() << "is running";
        app.sendMessage("running , 4000");
        return 0;
    }

    // 加载sdk控件翻译
    QTranslator trans;
    QString locale = QLocale::system().name();
    if (locale == "zh_CN") {
        if (trans.load(":/translations/gui_zh_CN.qm")) {
            app.installTranslator(&trans);
        }
    } else if (locale == "bo_CN") {
        if (trans.load(":/translations/gui_bo_CN.qm")) {
            app.installTranslator(&trans);
        }
    }

    // 加载翻译
    // 加载自定义翻译文件
    QString tranPath("/usr/share/kylin-connectivity/translations/");
    QTranslator tran;
    if (tran.load(QLocale(), QString("kylin-connectivity"), QString("_"), tranPath)) {
        app.installTranslator(&tran);
    } else {
        qWarning() << "Waring : load translation file fail";
    }

    // 加载qt翻译文件， 更改fileDialog英文
    QString qtTransPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
    QTranslator tranQt;
    if (tranQt.load(QLocale(), QString("qt"), QString("_"), qtTransPath)) {
        app.installTranslator(&tranQt);
    } else {
        qWarning() << "Waring : load qt translation file fail";
    }

    MainWindow::getInstance();

    // 添加窗管协议
    kabase::WindowManage::removeHeader(MainWindow::getInstance());

    /* 移动到窗口中间 */
    QRect availableGeometry = qApp->primaryScreen()->availableGeometry();
    MainWindow::getInstance()->move(availableGeometry.width() / 2 - MainWindow::getInstance()->width() / 2,
                                    availableGeometry.height() / 2 - MainWindow::getInstance()->height() / 2);
    app.setActivationWindow(MainWindow::getInstance());
    MainWindow::getInstance()->show();

    if (!initVLC()) {
        qCritical() << "vlc not installed!";
        QMessageBox msgBox;
        msgBox.setText(QObject::tr(
            "In order to ensure the normal operation of the program, please install the VLC program first!"));
        msgBox.setIcon(QMessageBox::Critical);
        msgBox.exec();
        MainWindow::getInstance()->close();
        exit(1);
    }

    DbusVfsInterface vfsDbus;
    QDBusConnection connection = QDBusConnection::sessionBus();
    connection.registerService(KYLIN_CONNECTIVITY_SERVICE);
    connection.registerObject(KYLIN_CONNECTIVITY_PATH, &vfsDbus,
                              QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals);

    int ret = app.exec();
    return ret;
}
